Fix delivery of nat consumption faults (still chatty)
authordjm@kirby.fc.hp.com <djm@kirby.fc.hp.com>
Fri, 11 Nov 2005 19:23:04 +0000 (13:23 -0600)
committerdjm@kirby.fc.hp.com <djm@kirby.fc.hp.com>
Fri, 11 Nov 2005 19:23:04 +0000 (13:23 -0600)
Signed-off by: Dan Magenheimer <dan.magenheimer@hp.com>

xen/arch/ia64/xen/process.c

index 2f8b84c9a762ea60cab65aa8d82a6fff38149f12..cfe91e4ef44da892ebc4af83f8d6dffb50058bbd 100644 (file)
@@ -743,10 +743,15 @@ ia64_handle_reflection (unsigned long ifa, struct pt_regs *regs, unsigned long i
                vector = IA64_DISABLED_FPREG_VECTOR;
                break;
            case 26:
+               if (((isr >> 4L) & 0xfL) == 1) {
+                       //regs->eml_unat = 0;  FIXME: DO WE NEED THIS??
+                       printf("ia64_handle_reflection: handling regNaT fault");
+                       vector = IA64_NAT_CONSUMPTION_VECTOR; break;
+               }
 printf("*** NaT fault... attempting to handle as privop\n");
 printf("isr=%p, ifa=%p,iip=%p,ipsr=%p\n",isr,ifa,regs->cr_iip,psr);
-               regs->eml_unat = 0;
-               return;
+               //regs->eml_unat = 0;  FIXME: DO WE NEED THIS???
+               // certain NaT faults are higher priority than privop faults
                vector = priv_emulate(v,regs,isr);
                if (vector == IA64_NO_FAULT) {
 printf("*** Handled privop masquerading as NaT fault\n");